解析器


1. 解析器的说明

  • 根据 Content-Type 类型对发送过来的数据进行解析

  • 可以通过编写中间件的方式实现解析器的功能

  • rest_framework 提供了4个解析器:

    • JSONParser ->  Content-Type = application/json
    • FormParser ->  Content-Type = application/x-www-form-urlencoded
    • MultiPartParser -> Content-Type = multipart/form-data
    • FileUploadParser -> Content-Type = */*

  • 在使用 rest_framework 的时候所有视图类默认支持 JSONParser、FormParser、MultiPartParser 解析器

2. 局部解析器

  • 局部解析器的配置(即: parser_classes = [解析器, 解析器])会覆盖掉该视图类在全局解析器中的配置

  • parser_classes = [解析器, 解析器]

  • 注意: 在日常开发中尽量不要去配置局部解析器和全局解析器,因为 rest_framework 默认所设置的3个解析器已经够用了

# views.py

from rest_framework import viewsets
from rest_framework.parsers import JSONParser, FormParser  # 导入解析器


class BookViewSet(viewsets.ModelViewSet):
parser_classes = [JSONParser]  # 该视图类只使用 JSONParser 解析器

    queryset = Book.objects.all()
    serializer_class = BookSerializers

3. 全局解析器

  • 全局解析器的设置作用于所有视图类

  • 可以通过设置局部解析器来覆盖全局解析器的设置

# settings.py

REST_FRAMEWORK = {
# "DEFAULT_AUTHENTICATION_CLASSES": ["app01.rf_auth.TokenAuth"],  # 全局认证
    # "DEFAULT_PERMISSION_CLASSES": ["app01.rf_permission.SVIPPermission"]  # 全局权限
    'DEFAULT_PARSER_CLASSES': ['rest_framework.parsers.JSONParser']  # 全局解析器
}